package com.cdn.website.service.impl;

import com.cdn.website.service.EdgeSyncService;
import org.springframework.stereotype.Service;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Service
public class EdgeSyncServiceImpl implements EdgeSyncService {

    public void asyncSyncContentToNode(String originAddress, String domain, int port) {
        // 使用线程池异步执行同步任务
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        executorService.submit(() -> {
            syncContentToCdn(originAddress, domain, port);
        });
        executorService.shutdown();
    }

    public void syncContentToCdn(String originAddress, String domain, int port) {
        // 通过 Netty 或 HTTP 请求源站内容
        try {
            String contentData = fetchContentFromOrigin(originAddress, domain, port);

            // 将源站内容推送到 CDN 边缘节点
            pushContentToNode(contentData);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String fetchContentFromOrigin(String originAddress, String domain, int port) {
        // 使用 HTTP 或 Netty 请求源站
        // 假设我们获取的是一个文件，比如 m3u8 文件
        // 你可以用 Netty 或其他 HTTP 客户端来实现
        return "fake content from source";
    }

    public void pushContentToNode(String contentData) {
        // 假设通过 HTTP POST 请求推送到 CDN 边缘节点
        System.out.println("Pushing content to CDN: " + contentData);
        // 这里可以实现将内容推送到 CDN 节点的具体操作
    }

}
